package com.example.stuwork.service;

import com.example.stuwork.common.Result;
import com.example.stuwork.dao.AssignmentAllocationStats;
import com.example.stuwork.pojo.AssignmentAllocation;

import java.util.List;

/**
 * 作业分配服务接口
 */
public interface AssignmentAllocationService {
    
    /**
     * 根据ID获取作业分配记录
     * 
     * @param allocationId 分配ID
     * @return 作业分配记录结果
     */
    Result<AssignmentAllocation> getAllocationById(Long allocationId);
    
    /**
     * 根据作业ID获取作业分配记录列表
     * 
     * @param assignmentId 作业ID
     * @return 作业分配记录列表结果
     */
    Result<List<AssignmentAllocation>> getAllocationsByAssignmentId(Long assignmentId);
    
    /**
     * 根据学生ID获取作业分配记录列表
     * 
     * @param studentId 学生ID
     * @return 作业分配记录列表结果
     */
    Result<List<AssignmentAllocation>> getAllocationsByStudentId(String studentId);
    
    /**
     * 根据作业ID和学生ID获取作业分配记录
     * 
     * @param assignmentId 作业ID
     * @param studentId 学生ID
     * @return 作业分配记录结果
     */
    Result<AssignmentAllocation> getAllocationByAssignmentIdAndStudentId(Long assignmentId, String studentId);
    
    /**
     * 根据作业ID和状态获取作业分配记录列表
     * 
     * @param assignmentId 作业ID
     * @param status 状态
     * @return 作业分配记录列表结果
     */
    Result<List<AssignmentAllocation>> getAllocationsByAssignmentIdAndStatus(Long assignmentId, Integer status);
    
    /**
     * 添加作业分配记录
     * 
     * @param allocation 作业分配记录信息
     * @return 添加结果
     */
    Result<AssignmentAllocation> addAllocation(AssignmentAllocation allocation);
    
    /**
     * 批量添加作业分配记录
     * 
     * @param allocations 作业分配记录列表
     * @return 添加结果
     */
    Result<Boolean> batchAddAllocations(List<AssignmentAllocation> allocations);
    
    /**
     * 更新作业分配记录
     * 
     * @param allocation 作业分配记录信息
     * @return 更新结果
     */
    Result<AssignmentAllocation> updateAllocation(AssignmentAllocation allocation);
    
    /**
     * 更新作业分配记录状态
     * 
     * @param allocationId 分配ID
     * @param status 状态
     * @return 更新结果
     */
    Result<Boolean> updateAllocationStatus(Long allocationId, Integer status);
    
    /**
     * 更新作业提交ID
     * 
     * @param allocationId 分配ID
     * @param submissionId 提交ID
     * @param status 状态
     * @return 更新结果
     */
    Result<Boolean> updateSubmissionId(Long allocationId, Long submissionId, Integer status);
    
    /**
     * 更新作业分配记录评分
     * 
     * @param allocationId 分配ID
     * @param score 分数
     * @return 更新结果
     */
    Result<Boolean> updateScore(Long allocationId, Integer score);
    
    /**
     * 删除作业分配记录
     * 
     * @param allocationId 分配ID
     * @return 删除结果
     */
    Result<Boolean> deleteAllocation(Long allocationId);
    
    /**
     * 根据作业ID删除所有相关的作业分配记录
     * 
     * @param assignmentId 作业ID
     * @return 删除结果
     */
    Result<Boolean> deleteAllocationsByAssignmentId(Long assignmentId);
    
    /**
     * 获取作业提交统计信息
     * 
     * @param assignmentId 作业ID
     * @return 统计信息结果
     */
    Result<AssignmentAllocationStats> getAssignmentStats(Long assignmentId);
    
    /**
     * 为新加入班级的学生分配所有有效的作业
     * 
     * @param studentId 学生ID
     * @param classId 班级ID
     * @return 分配结果
     */
    Result<Boolean> syncAssignmentsForNewStudent(String studentId, Long classId);
} 